扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:blog 2007年10月27日
关键字: More Effective C++ 异常 Linux
class exception { ... }; // 来自标准C++库(STL) // 中的异常类层次 void someFunction() { static exception ex; // 异常对象 ... throw &ex; // 抛出一个指针,指向ex ... } void doSomething() { try { someFunction(); // 抛出一个 exception* } catch (exception *ex) { // 捕获 exception*; ... // 没有对象被拷贝 } } |
void someFunction() { exception ex; // 局部异常对象; // 当退出函数的生存空间时 // 这个对象将被释放。 ... throw &ex; // 抛出一个指针,指向 ... // 已被释放的对象 } |
void someFunction() { ... throw new exception; // 抛出一个指针,指向一个在堆中 ... // 建立的对象(希望 } // 自己不要再抛出一个 // 异常!) |
class exception { // 如上,这是 public: // 一个标准异常类 virtual const char * what() throw(); // 返回异常的简短描述. ... // (在函数声明的结尾处 // 的"throw()", }; //有关它的信息 class runtime_error: //也来自标准C++异常类 public exception { ... }; class Validation_error: // 客户自己加入个类 public runtime_error { public: virtual const char * what() throw(); // 重新定义在异常类中 ... //虚拟函数 }; // void someFunction() // 抛出一个 validation { // 异常 ... if (a validation 测试失败) { throw Validation_error(); } ... } void doSomething() { try { someFunction(); // 抛出 validation } //异常 catch (exception ex) { //捕获所有标准异常类 // 或它的派生类 cerr << ex.what(); // 调用 exception::what(), ... // 而不是Validation_error::what() } } |
void someFunction() //这个函数没有改变 { ... if (a validation 测试失败) { throw Validation_error(); } ... } void doSomething() { try { someFunction(); // 没有改变 } catch (exception& ex) { // 这里,我们通过引用捕获异常 // 以替代原来的通过值捕获 cerr << ex.what(); // 现在调用的是 // Validation_error::what(), ... // 而不是 exception::what() } } |
濠碘€冲€归悘澶愬箖閵娾晜濮滈悽顖涚摃閹烩晠宕氶崶鈺傜暠闁诡垰鍘栫花锛勬喆椤ゅ弧濡澘妫楅悡娆撳嫉閳ь剟寮0渚€鐛撻柛婵呮缁楀矂骞庨埀顒勫嫉椤栨瑤绻嗛柟顓у灲缁辨繈鏌囬敐鍕杽閻犱降鍨藉Σ鍕嚊閹跺鈧﹦绱旈幋鐐参楅柡鍫灦閸嬫牗绂掔捄铏规闁哄嫷鍨遍崑宥夋儍閸曨剚浠樺ù锝嗗▕閳ь剚鏌ㄧ欢鐐寸▕鐎b晝顏遍柕鍡嫹